package continuity;

import java.util.ArrayList;
import java.util.List;

/**
 * Zetor csapat szekelton
 * 
 * A program célja hogy a modellről eldönthető legyen, hogy a feladat egy helyes
 * megoldását nyújtja.
 * 
 * @author Balogh Peter Tamas
 * @author Gál István László
 * @author Kárász Gábor
 * @author Simon Endre András
 * @author Szabó Alex
 */
public class LevelItem {

    private int pos_x;
    private int pos_y;
    private int id;
    private List<Sprite> sprites;
    /**
     * A szkeleton tesztelésének megkönnyítése érdekében minden osztályban szerepel 
     * className osztályszintű attribútum, mely az osztály nevét tartalmazza.
     */
    static public String className = "LevelItem";
    /**
     * A szkeleton tesztelésének egkönnyítésének érdekében minden osztályban szerepel
     * a name attribútum, mely az osztály egyedi nevét tartalmazza.
     */
    public String name;

    /**
     * 
     * @param n - az osztálynevet bállíthatjuk konstruktorból
     */
    public LevelItem(String n, int x, int y) {
        name = n;
        pos_x=x;
        pos_y=y;
        sprites = new ArrayList<Sprite>();
    }

    /**
     * 
     * @param dir - megnézi a hogy ha a karakter dir irányba halad, át lehet-e menni
     * a pályaelemek köztt
     * @return - igazzal tér vissza há át lehet haladni a pályaelemek közt, és hamissal
     * ha nem
     */
    public boolean checkNeighbour(int dir) {
        String classInfo = name + "(" + className + ")::CheckNeighbour(): bool";
        return true;
    }

    /**
     *  A LevelItem X koordiátáját adja vissza a Levelen belül
     */
    public int getPos_x() {
        String classInfo = name + "(" + className + ")::getPos_x(): int";
        return pos_x;
    }
    public String getName() {return name;}
    /**
     * 
     * @param dir - A karakter itt jelenti be a LevelItemnek, hogy ozogni fog.
     */
    public void move(int dir) {
        String classInfo = name + "(" + className + ")::move(int dir): void";
    }

    /**
     * A LevelItem Y koordinátáját adja vissza a Levelen belül.
     */
    public int getPos_y() {
        String classInfo = name + "(" + className + ")::getPos_y: void";
        return pos_y;
    }

    /**
     * 
     * @param s - hozzáadja az s Spriteot
     */
    public void addSprite(Sprite s) {
        String classInfo = name + "(" + className + ")::AddSprite(Sprite s): void";
        sprites.add(s);
    }
    public List<Sprite> getSprites() {
        return sprites;
    }

    /**
     * 
     * @param s - Az s spriteot ütközteti az összes, a pályaelemen található 
     * spriteal.
     * @param teszt - A szkeleton működésének megkönnyítése érdekében a teszt 
     * számát átadó segédparaméter
     */
    public boolean intersectAll(Sprite s, int dir) {
        for(Sprite test: sprites) {
            if( s.checkHit(test, dir) ) return true;
        }
        return false;
    }

    /**
     * Az óraütést kezelő függvény.
     */
    public void Tick() {
        String classInfo = name + "(" + className + ")::Tick(): void";
    }

    /**
     * 
     * @param position - megvizsgálja, hogy a karakter a pálya szélén van-e
     * @param dir - megadja a ozgás irányát, hogy tudjuk, a karakter el akarja-e
     * hagyni a pályát vagy sem
     */
    public void checkEdges(Point3d position, int dir) {
        String classInfo = name + "(" + className + ")::CheckNeighbour(): bool";
 
        }

    
}
